#include <iostream>
using namespace std;

long max_y(long a, long b)
{
    long c = a % b;
    while (c != 0)
    {
        a = b;
        b = c;
        c = a % b;
    }
    return b;
}

long min_b(long a, long b)
{
    long c = max_y(a, b);
    return a * b / c;
}

long fz[110];
long fm[110];
long real, ret_fz, ret_fm;

// 两个分数相加，结果放到第一个分数的位置
void my_add(long *fz1, long *fm1, long fz2, long fm2)
{
    long fm_b = min_b(*fm1, fm2);
    long new_fz1 = (*fz1) * (fm_b / (*fm1));
    long new_fz2 = fz2 * (fm_b / fm2);
    *fz1 = new_fz1 + new_fz2;
    *fm1 = fm_b;
}

// 将结果分数改为带分数
void make_reasonable(long fz, long fm)
{
    real = fz / fm;
    fz -= (fm * real);
    long y = max_y(fz, fm);
    ret_fz = fz / y;
    ret_fm = fm / y;
}

int main()
{
    long n;
    cin >> n;
    // //测试
    // long a,b;
    // cin>>a>>b;
    // cout<<max_y(a,b)<<endl;
    // cout<<min_b(a,b)<<endl;
    for (long i = 0; i < n; i++)
    {
        cin >> fz[i];
        cin.get();
        cin >> fm[i];
    }
    for (long i = 1; i < n; i++)
    {
        my_add(fz, fm, fz[i], fm[i]);
    }
    make_reasonable(fz[0], fm[0]);
    if (real)
    {
        cout << real;
    }
    //两者都有中间才打印空格
    if (real && ret_fz)
    {
        cout << " ";
    }
    if (ret_fz)
    {
        //负号可能在分母或者分子分母都是负数的情况
        if ((ret_fz > 0 && ret_fm < 0) || (ret_fz < 0 && ret_fm < 0))
        {
            ret_fz = -ret_fz;
            ret_fm = -ret_fm;
        }
        cout << ret_fz << "/" << ret_fm;
    }
    //都是0只打印一个0（没有一个if遇到都是0时不会打印）
    if (real == 0 && ret_fz == 0)
    {
        cout << "0";
    }
    return 0;
}